/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package frontera.dao;


import entidad.Bono;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

/**
 *
 * @author tuareg
 */
public class BonoDAO extends DAO<Bono>{

	public BonoDAO(String nombreEntidad) {
		super(nombreEntidad);
	}
	public 	BonoDAO() {
		this("Bono");
	}
        
	@Override
	public boolean actualizar(Bono viejaEntidad, Bono nuevaEntidad) {
            EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            boolean ret= false;
            try {
                viejaEntidad = leer(viejaEntidad);
                viejaEntidad.setCantidadBono(nuevaEntidad.getCantidadBono());
                viejaEntidad.setFecha(nuevaEntidad.getFecha());
                viejaEntidad.setDescripcion(nuevaEntidad.getDescripcion());
                em.merge(viejaEntidad);
                em.getTransaction().commit();
                ret = true;
            } catch (Exception e) {
                em.getTransaction().rollback();
            } finally {
                em.close();
                return ret;
            }
	}
        
        @Override
        public boolean eliminar(Bono bono){
                EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		boolean ret = false;
                Query q = em.createQuery(   "SELECT b FROM Bono b " +
                                        "WHERE b.id = :ID")
                                        .setParameter("ID", bono.getId());
                
                Bono nuevaEntidad = null;
                try {
                    nuevaEntidad = (Bono)q.getSingleResult();
                } catch (NonUniqueResultException e) {
                    nuevaEntidad = (Bono)q.getResultList().get(0);
                } catch (NoResultException e){
                    nuevaEntidad = null;
                }  
		
                try {
			em.remove(nuevaEntidad);
			em.getTransaction().commit();
			ret = true;
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
			return ret;
		}
        }

        public Bono leer(Bono par) {
            EntityManager em = emf.createEntityManager();
            Bono bono = null;

            Query q = em.createQuery(   "SELECT b FROM Bono b " +
                                        "WHERE b.id = :ID")
                                        .setParameter("ID", par.getId());
            try {
                bono = (Bono)q.getSingleResult();
            } catch (NonUniqueResultException e) {
                bono = (Bono)q.getResultList().get(0);
            } catch (NoResultException e){
                bono = null;
            } catch (Exception e){
                e.printStackTrace();
            }finally {
                em.close();
                return bono;
            }
        }
        
        public List<Bono> leerListado(long ID){
            EntityManager em = emf.createEntityManager();
            List<Bono> bonos = new ArrayList();
            
            Query q = em.createQuery(   "SELECT b FROM Bono b " +
                                        "WHERE b.empAsociado.ID = :EMPASOCIADO_ID")
                                        .setParameter("EMPASOCIADO_ID", ID);
            try{
                bonos = q.getResultList();
            } catch (Exception e){
                e.printStackTrace();
            }finally {
                em.close();
                return bonos;
            }
        }
}
